package org.rency.ues.client;

import org.rency.ues.common.UesException;
import org.rency.ues.common.enums.EncryptType;

import java.util.List;
import java.util.Map;

/**
 * ${todo}
 *
 * @author: Created by user_rcy@163.com on 2016/8/1.
 * @version: V1.0.0
 * @since JDK 1.8
 */
public interface UesClient {

    /**
     * 加密(加密方式、证书序列号默认)
     * @param plainData 待加密数据
     * @return 成功则返回密钥<p>Ticket</p>
     * @throws UesException 失败抛出<p>UesException</p>异常
     */
    public String encrypt(String plainData) throws UesException;

    /**
     * 使用默认加密方式加密
     * @param plainData 待加密数据
     * @param serialNo 加密证书序列号
     * @return 成功则返回密钥<p>Ticket</p>
     * @throws UesException 失败抛出<p>UesException</p>异常
     */
    public String encrypt(String plainData, String serialNo) throws UesException;

    /**
     * 加密
     * @param plainData 待加密数据
     * @param encryptType 加密方式
     * @param serialNo 加密证书序列号
     * @return 成功则返回密钥<p>Ticket</p>
     * @throws UesException 失败抛出<p>UesException</p>异常
     */
    public String encrypt(String plainData, EncryptType encryptType,String serialNo) throws UesException;

    /**
     * 解密
     * @param ticket 密钥
     * @return
     * @throws UesException 失败抛出<p>UesException</p>异常
     */
    public String decrypt(String ticket) throws UesException;

    /**
     * 批量加密
     * @param plainDatas
     * @return <p>Key</p>:明文,<p>Value</p>:密钥
     * @throws UesException 失败抛出<p>UesException</p>异常
     */
    public Map<String, String> encrypt(List<String> plainDatas) throws UesException;

    /**
     * 批量加密
     * @param plainDatas
     * @param serialNo
     * @return <p>Key</p>:明文,<p>Value</p>:密钥
     * @throws UesException 失败抛出<p>UesException</p>异常
     */
    public Map<String, String> encrypt(List<String> plainDatas,String serialNo) throws UesException;

    /**
     * 批量加密
     * @param plainDatas
     * @param encryptType
     * @param serialNo
     * @return <p>Key</p>:明文,<p>Value</p>:密钥
     * @throws UesException 失败抛出<p>UesException</p>异常
     */
    public Map<String, String> encrypt(List<String> plainDatas,EncryptType encryptType,String serialNo) throws UesException;

    /**
     * 批量解密
     * @param tickets
     * @return <p>Key</p>:密钥,<p>Value</p>:明文
     * @throws UesException 失败抛出<p>UesException</p>异常
     */
    public Map<String, String> decrypt(List<String> tickets) throws UesException;
}